package com.wfg.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark09_RDD_Operator_Transform {

    def main(args: Array[String]): Unit = {

        val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator")
        val sc = new SparkContext(sparkConf)

        // TODO 算子 - distinct
        val rdd = sc.makeRDD(List(1,2,3,4,1,2,3,4))
        /**
         * map：是一个函数，它接受一个参数（在这里是一个匿名函数），并将这个参数应用于给定集合中的每个元素。
         * _：在 Scala 中，下划线是一个占位符，用于表示匿名参数。你可以将它想象为一个临时变量名，Spark 也会使用它来表示数据集中的列名。
         * ._1：这是对元组中第一个元素的引用。在 Scala 中，元组的每个元素可以通过后缀 ._n 来访问，其中 n 是元素的索引（从1开始）。
         * 因此，map(_._1) 的含义是从集合中的每个元组中提取第一个元素，并创建一个新的集合，该集合只包含这些提取出来的元素。
         */

        // map(x => (x, null)).reduceByKey((x, _) => x, numPartitions).map(_._1)

        // (1, null),(2, null),(3, null),(4, null),(1, null),(2, null),(3, null),(4, null)
        // (1, null)(1, null)(1, null)
        // (null, null) => null
        // (1, null) => 1
        val rdd1: RDD[Int] = rdd.distinct()

        rdd1.collect().foreach(println)



        sc.stop()

    }
}
